const Base = require('./base.js');
const md5 = require('md5');
const captchapng = require('svg-captcha');
const cookieParase = require('cookie-parser');

module.exports = class extends Base {
    indexAction() {
        return this.display();
    }

    async loginAction() {
        if (this.isPost) { //判断是否发送信息给后台了，post数据过来.注意：isPost中的P是大写，js是对大小写敏感的。
            let username = this.post('username');//获取用户名给username变量
            let password = this.post('password');
            let vCode = this.post('vCode');
            let userinfo = await this.session('vCode');
            // if (vCode.toUpperCase() !== userinfo.toUpperCase()) {
            //     // return this.redirect('/error/index');
            //     return this.fail(403, '验证码错误，请重新输入!');
            // }

            if (password != null) {
                password = md5(password);     //如果密码不为空则进行md5加密
            }
            let data = null;

            try {
                data = await this.model('user').where({username: username, password: password}).find();//到数据库中去查找看是否有数据（用户名密码同时相符）
            } catch (e) {
                return this.json('2')//登录不成功，返回错误信息。
            }

            if (think.isEmpty(data)) {
                return this.json('0');
            } else {
                await this.session('userinfo', data);
                //去获取权限
                let role = await this.model('user_role').where({user_id: data.id}).find();
                let config_attribute = await this.model('role').where({id: role.role_id}).find();
                this.session('attribute', config_attribute);
                let menu_map = null;
                //权限小于等于2的情况 1超级管理员 2系统管理员
                if (role.role_id <= 2) {
                    menu_map = await this.model('request_map').where({type: ['>=', 0]}).select();   //管理员获得所有权限
                } else {
                    menu_map = await this.model('request_map').where({type: ['>=', role.role_id]}).select();    //根据用户本身获得权限
                }
                await this.session('usermenu', menu_map);
                return this.json('1');//登录成功将用户信息写入session，返回到user首页。
            }
        }
        return this.fail('500', '请求格式错误！');
    }

    loginPageAction() {
        return this.display();
    }

    async getVcodeAction() {
        let code = captchapng.create({
            // 翻转颜色
            inverse: false,
            // 字体大小
            fontSize: 46,
            // 噪声线条数
            noise: 3,
            // 宽度
            width: 100,
            // 高度
            height: 30,
        });
        await this.session('vCode', code.text);
        // this.cookie('captcha',code.text);
        this.ctx.res.setHeader('Content-Type', 'image/svg+xml');
        this.ctx.res.write(String(code.data));
        this.ctx.res.end();
    }

    // 删除整个 session
    async logoutAction() {
        await this.session(null);
        return this.redirect('/index/loginPage')
    }
};


